/*
 * @Author: 0x9DEFA478
 * @Date: 2024-07-29 17:44:16
 * @LastEditTime: 2024-07-31 18:33:36
 * @LastEditors: 0x9DEFA478
 * @Description: 
 * QQ:2652450237
 * ============================================================================================================================================
 * 
 * 
 * 
 *                                                                                               ************      ****************************
 *                                                                                             ************      ****************************  
 *                                                                                           ************      ****************************    
 *                                                                                         ************      ****************************      
 *                                                                                       ************      ************                        
 *                                                                                     ************      ************                          
 *                                                                                   ************      ************                            
 *                                                                                 ************      ************                              
 *                                                                               ************      ************                                
 *                                                                             ************      ************                                  
 *                                                                           ************      ************                                    
 *                                                                         ************      ************                                      
 *                                                                       ************      ************                                        
 *                                                                     ************      ************                                          
 *                                                                   ************      ************                                            
 *                                                                 ************      ************                                              
 *                                                               ************      ************                                                
 *                                                             ************      ************                                                  
 *                                                           ************      ************                                                    
 *                                                         ************      ************                                                      
 *                                                       ************      ************                                                        
 *                                                     ************      ************                                                          
 *                                                   ************      ************                                                            
 *                                                 ************      ************                                                              
 *                                               ************      ************                                                                
 *                                             ************      ************                                                                  
 *                                           ************      ************                                                                    
 *                                         ************      ************                                                                      
 *                                       ************      ************                                                                        
 *                                     ************      ************                                                                          
 *                                   ************      ************                                                                            
 *                                 ************      ************                                                                              
 *                               ************      ************                                                                                
 *                             ************      ************                                                                                  
 *                           ************      ************                                                                                    
 *                         ************      ************                                                                                      
 *       ****************************      ************                                                                                        
 *     ****************************      ************                                                                                          
 *   ****************************      ************                                                                                            
 * ****************************      ************                                                                                              
 * 
 * 
 * 
 * ============================================================================================================================================
 * 
 */
#ifndef hAPI_H_TS_Lock_H_
#define hAPI_H_TS_Lock_H_
#include "./H_TS_Thread.h"




typedef struct{
  H_TS_Thread* volatile Owner;                                    //锁定锁的线程
  volatile Hsize Priority;                                        //用于保存优先级 (优先级继承机制会使线程优先级被修改 此段用于备份原来的优先级)
  volatile Husize ReLockCnt;                                      //重复锁定计数
  H_TS_Thread* volatile WaitLockThreads;                          //等待锁定该锁的线程
}H_TS_Lock;




/**
 * @brief 将一块内存构造为锁
 * @param Lock 待构造的内存
 * @return 无
 */
void H_TS_Lock_Init(H_TS_Lock* Lock);

/**
 * @brief 将一个锁析构为普通内存
 * @param Lock 要析构的锁
 * @return 0:成功 -1:锁正在被其他线程占用
 */
int H_TS_Lock_Deinit(H_TS_Lock* Lock);

/**
 * @brief 新建一个锁
 * @return 锁对象 如果为NULL 则失败
 */
H_TS_Lock* new_H_TS_Lock(void);

/**
 * @brief 删除一个锁
 * @param Lock 要删除的锁
 * @return 0:成功 -1:锁正在被其他线程占用
 */
int delete_H_TS_Lock(H_TS_Lock* Lock);

/**
 * @brief 锁定一个锁 如果锁正被别的线程占用, 则等待直到锁被释放后锁定锁
 * @param Lock 要锁定的锁
 * @return 无
 */
void H_TS_Lock_Lock(H_TS_Lock* Lock);

/**
 * @brief 尝试锁定一个锁 如果锁正被别的线程占用, 返回一个失败值
 * @param Lock 要锁定的锁
 * @return 0:成功 其他:失败
 */
int H_TS_Lock_TryLock(H_TS_Lock* Lock);

/**
 * @brief 释放一个锁
 * @param Lock 要释放的锁
 * @return 无
 */
void H_TS_Lock_Unlock(H_TS_Lock* Lock);




#endif //hAPI_H_TS_Lock_H_
